{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T05:12:39.605784Z",
     "start_time": "2019-03-12T05:12:30.355777Z"
    }
   },
   "outputs": [],
   "source": [
    "\"\"\"\n",
    "GBDT-LR模型\n",
    " 1.准备GBDT输入的label encoding\n",
    " 2.准备GBDT输入的 one-hot encoding\n",
    " 3.建立GBDT-LR模型，并训练调参\n",
    " 4.预测结果    \n",
    "    \n",
    "\"\"\"\n",
    "\n",
    "##==================== 导入工具包 ====================##\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import random\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "from sklearn.linear_model import SGDClassifier  # using SGDClassifier for training incrementally\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from dummyPy import OneHotEncoder  # for one-hot encoding on a large scale of chunks\n",
    "from sklearn.metrics import log_loss\n",
    "import matplotlib.pyplot as plt\n",
    "import pickle\n",
    "import gc\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T05:12:39.630720Z",
     "start_time": "2019-03-12T05:12:39.608774Z"
    }
   },
   "outputs": [],
   "source": [
    "##==================== 文件路径 ====================##\n",
    "\n",
    "\n",
    "## 子训练集\n",
    "fp_sub_train_f = \"feature_engineering/sub_train_f.csv\"\n",
    "fp_sub_test_f = \"feature_engineering/sub_test_f.csv\"\n",
    "\n",
    "## label encoder for gbdt input\n",
    "fp_lb_enc = \"feature_engineering/lb_enc\"\n",
    "\n",
    "## one-hot encoder for gbdt output\n",
    "fp_oh_enc_gbdt = \"gbdt/oh_enc_gbdt\"\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T05:12:39.662628Z",
     "start_time": "2019-03-12T05:12:39.640690Z"
    }
   },
   "outputs": [],
   "source": [
    "##==================== GBDT 模型 ====================##\n",
    "## feature names\n",
    "cols = ['C1',\n",
    "        'banner_pos', \n",
    "        'site_domain', \n",
    "        'site_id',\n",
    "        'site_category',\n",
    "        'app_id',\n",
    "        'app_category', \n",
    "        'device_type', \n",
    "        'device_conn_type',\n",
    "        'C14', \n",
    "        #'C15',\n",
    "        #'C16',\n",
    "        'date',\n",
    "        'time_period',\n",
    "        'weekday',\n",
    "        'C15_C16'  ]\n",
    "\n",
    "cols_train = ['id', 'click']\n",
    "cols_test  = ['id']\n",
    "cols_train.extend(cols)\n",
    "cols_test.extend(cols)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T05:13:23.000956Z",
     "start_time": "2019-03-12T05:12:49.275255Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "14"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#----- data for GBDT (label encoding) -----#\n",
    "df_train = pd.read_csv(fp_sub_train_f)  # data load\n",
    "\n",
    "\n",
    "## label 编码的转换\n",
    "label_enc = pickle.load(open(fp_lb_enc, 'rb'))\n",
    "for col in cols:\n",
    "    df_train[col] = label_enc[col].fit_transform(df_train[col].values)\n",
    "\n",
    "## 为GBDT 和LR 模型训练分别分割数据\n",
    "## 这为了防止过拟合\n",
    "X_train_org = df_train[cols].get_values()\n",
    "y_train_org = df_train['click'].get_values()\n",
    "\n",
    "# 30% 做验证集，70%做训练集\n",
    "X_train_gbdt, X_valid, y_train_gbdt, y_valid = train_test_split(X_train_org, y_train_org, test_size = 0.3, random_state = 0)\n",
    "\n",
    "\n",
    "del df_train\n",
    "\n",
    "gc.collect()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T05:13:37.959415Z",
     "start_time": "2019-03-12T05:13:37.934482Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GradientBoostingClassifier(criterion='friedman_mse', init=None,\n",
       "              learning_rate=0.2, loss='deviance', max_depth=8,\n",
       "              max_features=None, max_leaf_nodes=None,\n",
       "              min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "              min_samples_leaf=10, min_samples_split=20,\n",
       "              min_weight_fraction_leaf=0.0, n_estimators=100,\n",
       "              presort='auto', random_state=1, subsample=0.01, verbose=0,\n",
       "              warm_start=False)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#----- GBDT 模型训练-----#\n",
    "#----- 默认参数-----#\n",
    "\n",
    "params = {  # init the hyperparams of GBDT\n",
    "    'learning_rate': 0.2,\n",
    "    'n_estimators': 100,  # number of trees here\n",
    "    'max_depth': 8,  # set max_depth of a tree\n",
    "    'min_samples_split': 20, \n",
    "    'min_samples_leaf': 10,\n",
    "    'subsample': 0.01, \n",
    "    'max_leaf_nodes': None,  # set max leaf nodes of a tree\n",
    "    'random_state': 1,\n",
    "    'verbose': 0\n",
    "    }\n",
    "\n",
    "max_merror = float('Inf')\n",
    "best_params = {}\n",
    "\n",
    "gbdt_model = GradientBoostingClassifier(random_state=10)\n",
    "gbdt_model.set_params(**params)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T06:42:15.720501Z",
     "start_time": "2019-03-12T05:13:41.008911Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "training: n_estimators =  10\n",
      "log loss of GBDT on train set: 0.42719\n",
      "log loss of GBDT on valid set: 0.42693\n",
      "training: n_estimators =  20\n",
      "log loss of GBDT on train set: 0.42535\n",
      "log loss of GBDT on valid set: 0.42584\n",
      "training: n_estimators =  30\n",
      "log loss of GBDT on train set: 0.42374\n",
      "log loss of GBDT on valid set: 0.42451\n",
      "training: n_estimators =  40\n",
      "log loss of GBDT on train set: 0.42452\n",
      "log loss of GBDT on valid set: 0.42555\n",
      "training: n_estimators =  50\n",
      "log loss of GBDT on train set: 0.42459\n",
      "log loss of GBDT on valid set: 0.42670\n",
      "training: n_estimators =  60\n",
      "log loss of GBDT on train set: 0.42609\n",
      "log loss of GBDT on valid set: 0.42848\n",
      "training: n_estimators =  70\n",
      "log loss of GBDT on train set: 0.42566\n",
      "log loss of GBDT on valid set: 0.42784\n",
      "training: n_estimators =  80\n",
      "log loss of GBDT on train set: 0.42678\n",
      "log loss of GBDT on valid set: 0.42973\n",
      "training: n_estimators =  90\n",
      "log loss of GBDT on train set: 0.42878\n",
      "log loss of GBDT on valid set: 0.43124\n",
      "training: n_estimators =  100\n",
      "log loss of GBDT on train set: 0.42956\n",
      "log loss of GBDT on valid set: 0.43186\n",
      "training: n_estimators =  110\n",
      "log loss of GBDT on train set: 0.43032\n",
      "log loss of GBDT on valid set: 0.43334\n",
      "training: n_estimators =  120\n",
      "log loss of GBDT on train set: 0.43055\n",
      "log loss of GBDT on valid set: 0.43412\n",
      "{'n_estimators': 30}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#----- GBDT 调参 -----#\n",
    "\n",
    "### 1. n_estimators\n",
    "\n",
    "log_loss_train = []\n",
    "log_loss_valid = []\n",
    "\n",
    "for nt in range(10,130,10):\n",
    "    print('training: n_estimators = ', nt)\n",
    "    \n",
    "    params['n_estimators'] = nt\n",
    "    gbdt_model.set_params(**params)\n",
    "    gbdt_model.fit(X_train_gbdt, y_train_gbdt)\n",
    "    # scores\n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_train_gbdt)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_train_gbdt, y_pred_gbdt)\n",
    "    print('log loss of GBDT on train set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_train.append(log_loss_gbdt)\n",
    "    \n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_valid)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_valid, y_pred_gbdt)\n",
    "    print('log loss of GBDT on valid set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_valid.append(log_loss_gbdt)\n",
    "    \n",
    "    mean_merror = log_loss_gbdt\n",
    "    \n",
    "\n",
    "    if mean_merror < max_merror:\n",
    "        max_merror = mean_merror\n",
    "        best_params['n_estimators'] = nt\n",
    "        \n",
    "\n",
    "print(best_params)\n",
    "\n",
    "params['n_estimators'] = best_params['n_estimators']\n",
    "    \n",
    "\n",
    "gc.collect()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T06:42:16.171683Z",
     "start_time": "2019-03-12T06:42:15.743444Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## plot the curve\n",
    "f1 = plt.figure(1)\n",
    "n_estimators =  range(10,130,10)\n",
    "plt.plot(n_estimators, log_loss_train, label='train')\n",
    "plt.plot(n_estimators, log_loss_valid, label='valid')\n",
    "plt.xlabel('n_estimators')\n",
    "plt.ylabel('log_loss')\n",
    "plt.title('n_estimators')\n",
    "plt.legend()\n",
    "plt.grid(True, linewidth=0.3)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "max_merror = float('Inf')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T08:33:21.972559Z",
     "start_time": "2019-03-12T07:41:35.909951Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "training: max_depth =  2\n",
      "log loss of GBDT on train set: 0.43528\n",
      "log loss of GBDT on valid set: 0.43538\n",
      "training: max_depth =  3\n",
      "log loss of GBDT on train set: 0.42901\n",
      "log loss of GBDT on valid set: 0.42913\n",
      "training: max_depth =  4\n",
      "log loss of GBDT on train set: 0.42517\n",
      "log loss of GBDT on valid set: 0.42572\n",
      "training: max_depth =  5\n",
      "log loss of GBDT on train set: 0.42359\n",
      "log loss of GBDT on valid set: 0.42417\n",
      "training: max_depth =  6\n",
      "log loss of GBDT on train set: 0.42417\n",
      "log loss of GBDT on valid set: 0.42405\n",
      "training: max_depth =  7\n",
      "log loss of GBDT on train set: 0.42328\n",
      "log loss of GBDT on valid set: 0.42366\n",
      "training: max_depth =  8\n",
      "log loss of GBDT on train set: 0.42374\n",
      "log loss of GBDT on valid set: 0.42451\n",
      "training: max_depth =  9\n",
      "log loss of GBDT on train set: 0.42520\n",
      "log loss of GBDT on valid set: 0.42672\n",
      "training: max_depth =  10\n",
      "log loss of GBDT on train set: 0.42626\n",
      "log loss of GBDT on valid set: 0.42793\n",
      "training: max_depth =  11\n",
      "log loss of GBDT on train set: 0.42522\n",
      "log loss of GBDT on valid set: 0.42744\n",
      "training: max_depth =  12\n",
      "log loss of GBDT on train set: 0.42669\n",
      "log loss of GBDT on valid set: 0.42896\n",
      "{'n_estimators': 30, 'max_depth': 7}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "41"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### max_depth\n",
    "log_loss_train = []\n",
    "log_loss_valid = []\n",
    "\n",
    "for md in range(2,13,1):\n",
    "    print('training: max_depth = ', md)\n",
    "    \n",
    "    params['max_depth'] = md\n",
    "    gbdt_model.set_params(**params)\n",
    "    gbdt_model.fit(X_train_gbdt, y_train_gbdt)\n",
    "    # scores\n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_train_gbdt)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_train_gbdt, y_pred_gbdt)\n",
    "    print('log loss of GBDT on train set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_train.append(log_loss_gbdt)\n",
    "    \n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_valid)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_valid, y_pred_gbdt)\n",
    "    print('log loss of GBDT on valid set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_valid.append(log_loss_gbdt)\n",
    "    \n",
    "    \n",
    "    mean_merror = log_loss_gbdt\n",
    "    \n",
    "\n",
    "    if mean_merror < max_merror:\n",
    "        max_merror = mean_merror\n",
    "        best_params['max_depth'] = md\n",
    "                \n",
    "print(best_params) \n",
    "params['max_depth'] = best_params['max_depth']\n",
    "  \n",
    "\n",
    "gc.collect()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T08:33:22.238842Z",
     "start_time": "2019-03-12T08:33:21.985523Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## plot the curve\n",
    "f1 = plt.figure(2)\n",
    "max_depths = range(2,13,1)\n",
    "plt.plot(max_depths, log_loss_train, label='train')\n",
    "plt.plot(max_depths, log_loss_valid, label='valid')\n",
    "plt.xlabel('max_depth')\n",
    "plt.ylabel('log_loss')\n",
    "plt.title('max_depth')\n",
    "plt.legend()\n",
    "plt.grid(True, linewidth=0.3)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "max_merror = float('Inf')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T09:57:12.428434Z",
     "start_time": "2019-03-12T09:00:24.359171Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "training: min_samples_split =  5\n",
      "log loss of GBDT on train set: 0.42328\n",
      "log loss of GBDT on valid set: 0.42366\n",
      "training: min_samples_split =  10\n",
      "log loss of GBDT on train set: 0.42328\n",
      "log loss of GBDT on valid set: 0.42366\n",
      "training: min_samples_split =  15\n",
      "log loss of GBDT on train set: 0.42328\n",
      "log loss of GBDT on valid set: 0.42366\n",
      "training: min_samples_split =  20\n",
      "log loss of GBDT on train set: 0.42328\n",
      "log loss of GBDT on valid set: 0.42366\n",
      "training: min_samples_split =  25\n",
      "log loss of GBDT on train set: 0.42361\n",
      "log loss of GBDT on valid set: 0.42454\n",
      "training: min_samples_split =  30\n",
      "log loss of GBDT on train set: 0.42285\n",
      "log loss of GBDT on valid set: 0.42328\n",
      "training: min_samples_split =  35\n",
      "log loss of GBDT on train set: 0.42321\n",
      "log loss of GBDT on valid set: 0.42365\n",
      "training: min_samples_split =  40\n",
      "log loss of GBDT on train set: 0.42416\n",
      "log loss of GBDT on valid set: 0.42467\n",
      "training: min_samples_split =  45\n",
      "log loss of GBDT on train set: 0.42291\n",
      "log loss of GBDT on valid set: 0.42290\n",
      "training: min_samples_split =  50\n",
      "log loss of GBDT on train set: 0.42263\n",
      "log loss of GBDT on valid set: 0.42280\n",
      "training: min_samples_split =  55\n",
      "log loss of GBDT on train set: 0.42285\n",
      "log loss of GBDT on valid set: 0.42316\n",
      "training: min_samples_split =  60\n",
      "log loss of GBDT on train set: 0.42247\n",
      "log loss of GBDT on valid set: 0.42234\n",
      "training: min_samples_split =  65\n",
      "log loss of GBDT on train set: 0.42245\n",
      "log loss of GBDT on valid set: 0.42299\n",
      "training: min_samples_split =  70\n",
      "log loss of GBDT on train set: 0.42235\n",
      "log loss of GBDT on valid set: 0.42255\n",
      "training: min_samples_split =  75\n",
      "log loss of GBDT on train set: 0.42251\n",
      "log loss of GBDT on valid set: 0.42259\n",
      "training: min_samples_split =  80\n",
      "log loss of GBDT on train set: 0.42230\n",
      "log loss of GBDT on valid set: 0.42229\n",
      "training: min_samples_split =  85\n",
      "log loss of GBDT on train set: 0.42172\n",
      "log loss of GBDT on valid set: 0.42172\n",
      "training: min_samples_split =  90\n",
      "log loss of GBDT on train set: 0.42226\n",
      "log loss of GBDT on valid set: 0.42271\n",
      "training: min_samples_split =  95\n",
      "log loss of GBDT on train set: 0.42275\n",
      "log loss of GBDT on valid set: 0.42289\n",
      "{'n_estimators': 30, 'max_depth': 7, 'min_samples_split': 85}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "2620"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### min_samples_split\n",
    "log_loss_train = []\n",
    "log_loss_valid = []\n",
    "\n",
    "for mss in range(5,100,5):\n",
    "    print('training: min_samples_split = ', mss)\n",
    "    \n",
    "    params['min_samples_split'] = mss\n",
    "    gbdt_model.set_params(**params)\n",
    "    gbdt_model.fit(X_train_gbdt, y_train_gbdt)\n",
    "    # scores\n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_train_gbdt)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_train_gbdt, y_pred_gbdt)\n",
    "    print('log loss of GBDT on train set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_train.append(log_loss_gbdt)\n",
    "    \n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_valid)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_valid, y_pred_gbdt)\n",
    "    print('log loss of GBDT on valid set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_valid.append(log_loss_gbdt)\n",
    "    \n",
    "    mean_merror = log_loss_gbdt\n",
    "    \n",
    "\n",
    "    if mean_merror < max_merror:\n",
    "        max_merror = mean_merror\n",
    "        best_params['min_samples_split'] = mss\n",
    "                \n",
    "print(best_params) \n",
    "params['min_samples_split'] = best_params['min_samples_split']\n",
    "\n",
    "gc.collect()\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T09:57:12.715778Z",
     "start_time": "2019-03-12T09:57:12.444390Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## plot the curve\n",
    "f1 = plt.figure(3)\n",
    "min_samples_splits = range(5,100,5)\n",
    "plt.plot(min_samples_splits, log_loss_train, label='train')\n",
    "plt.plot(min_samples_splits, log_loss_valid, label='valid')\n",
    "plt.xlabel('min_samples_split')\n",
    "plt.ylabel('log_loss')\n",
    "plt.title('min_samples_split')\n",
    "plt.legend()\n",
    "plt.grid(True, linewidth=0.3)\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "max_merror = float('Inf')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T11:42:35.867172Z",
     "start_time": "2019-03-12T10:25:15.972877Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "training: min_samples_leaf =  1\n",
      "log loss of GBDT on train set: 0.42528\n",
      "log loss of GBDT on valid set: 0.42581\n",
      "training: min_samples_leaf =  2\n",
      "log loss of GBDT on train set: 0.42365\n",
      "log loss of GBDT on valid set: 0.42410\n",
      "training: min_samples_leaf =  3\n",
      "log loss of GBDT on train set: 0.42249\n",
      "log loss of GBDT on valid set: 0.42314\n",
      "training: min_samples_leaf =  4\n",
      "log loss of GBDT on train set: 0.42302\n",
      "log loss of GBDT on valid set: 0.42330\n",
      "training: min_samples_leaf =  5\n",
      "log loss of GBDT on train set: 0.42240\n",
      "log loss of GBDT on valid set: 0.42231\n",
      "training: min_samples_leaf =  6\n",
      "log loss of GBDT on train set: 0.42266\n",
      "log loss of GBDT on valid set: 0.42278\n",
      "training: min_samples_leaf =  7\n",
      "log loss of GBDT on train set: 0.42261\n",
      "log loss of GBDT on valid set: 0.42321\n",
      "training: min_samples_leaf =  8\n",
      "log loss of GBDT on train set: 0.42311\n",
      "log loss of GBDT on valid set: 0.42300\n",
      "training: min_samples_leaf =  9\n",
      "log loss of GBDT on train set: 0.42298\n",
      "log loss of GBDT on valid set: 0.42310\n",
      "training: min_samples_leaf =  10\n",
      "log loss of GBDT on train set: 0.42172\n",
      "log loss of GBDT on valid set: 0.42172\n",
      "training: min_samples_leaf =  11\n",
      "log loss of GBDT on train set: 0.42323\n",
      "log loss of GBDT on valid set: 0.42319\n",
      "training: min_samples_leaf =  12\n",
      "log loss of GBDT on train set: 0.42224\n",
      "log loss of GBDT on valid set: 0.42256\n",
      "training: min_samples_leaf =  13\n",
      "log loss of GBDT on train set: 0.42247\n",
      "log loss of GBDT on valid set: 0.42225\n",
      "training: min_samples_leaf =  14\n",
      "log loss of GBDT on train set: 0.42230\n",
      "log loss of GBDT on valid set: 0.42201\n",
      "training: min_samples_leaf =  15\n",
      "log loss of GBDT on train set: 0.42218\n",
      "log loss of GBDT on valid set: 0.42223\n",
      "training: min_samples_leaf =  16\n",
      "log loss of GBDT on train set: 0.42248\n",
      "log loss of GBDT on valid set: 0.42224\n",
      "training: min_samples_leaf =  17\n",
      "log loss of GBDT on train set: 0.42232\n",
      "log loss of GBDT on valid set: 0.42209\n",
      "training: min_samples_leaf =  18\n",
      "log loss of GBDT on train set: 0.42216\n",
      "log loss of GBDT on valid set: 0.42198\n",
      "training: min_samples_leaf =  19\n",
      "log loss of GBDT on train set: 0.42155\n",
      "log loss of GBDT on valid set: 0.42205\n",
      "training: min_samples_leaf =  20\n",
      "log loss of GBDT on train set: 0.42169\n",
      "log loss of GBDT on valid set: 0.42202\n",
      "training: min_samples_leaf =  21\n",
      "log loss of GBDT on train set: 0.42229\n",
      "log loss of GBDT on valid set: 0.42238\n",
      "training: min_samples_leaf =  22\n",
      "log loss of GBDT on train set: 0.42184\n",
      "log loss of GBDT on valid set: 0.42168\n",
      "training: min_samples_leaf =  23\n",
      "log loss of GBDT on train set: 0.42234\n",
      "log loss of GBDT on valid set: 0.42254\n",
      "training: min_samples_leaf =  24\n",
      "log loss of GBDT on train set: 0.42165\n",
      "log loss of GBDT on valid set: 0.42226\n",
      "training: min_samples_leaf =  25\n",
      "log loss of GBDT on train set: 0.42217\n",
      "log loss of GBDT on valid set: 0.42261\n",
      "training: min_samples_leaf =  26\n",
      "log loss of GBDT on train set: 0.42254\n",
      "log loss of GBDT on valid set: 0.42270\n",
      "training: min_samples_leaf =  27\n",
      "log loss of GBDT on train set: 0.42244\n",
      "log loss of GBDT on valid set: 0.42265\n",
      "training: min_samples_leaf =  28\n",
      "log loss of GBDT on train set: 0.42232\n",
      "log loss of GBDT on valid set: 0.42247\n",
      "training: min_samples_leaf =  29\n",
      "log loss of GBDT on train set: 0.42198\n",
      "log loss of GBDT on valid set: 0.42239\n",
      "{'n_estimators': 30, 'max_depth': 7, 'min_samples_split': 85, 'min_samples_leaf': 22}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "2643"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### min_samples_leaf\n",
    "log_loss_train = []\n",
    "log_loss_valid = []\n",
    "\n",
    "for msl in range(1,30,1):\n",
    "    print('training: min_samples_leaf = ', msl)\n",
    "    \n",
    "    params['min_samples_leaf'] = msl\n",
    "    gbdt_model.set_params(**params)\n",
    "    gbdt_model.fit(X_train_gbdt, y_train_gbdt)\n",
    "    # scores\n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_train_gbdt)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_train_gbdt, y_pred_gbdt)\n",
    "    print('log loss of GBDT on train set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_train.append(log_loss_gbdt)\n",
    "    \n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_valid)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_valid, y_pred_gbdt)\n",
    "    print('log loss of GBDT on valid set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_valid.append(log_loss_gbdt)\n",
    "    \n",
    "    \n",
    "    mean_merror = log_loss_gbdt\n",
    "    \n",
    "\n",
    "    if mean_merror < max_merror:\n",
    "        max_merror = mean_merror\n",
    "        best_params['min_samples_leaf'] = msl\n",
    "                \n",
    "print(best_params) \n",
    "params['min_samples_leaf'] = best_params['min_samples_leaf']   \n",
    "\n",
    "gc.collect()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-03-12T11:42:36.367471Z",
     "start_time": "2019-03-12T11:42:35.907701Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## plot the curve\n",
    "f1 = plt.figure(4)\n",
    "min_samples_leafs = range(1,30,1)\n",
    "plt.plot(min_samples_leafs, log_loss_train, label='train')\n",
    "plt.plot(min_samples_leafs, log_loss_valid, label='valid')\n",
    "plt.xlabel('min_samples_leaf')\n",
    "plt.ylabel('log_loss')\n",
    "plt.title('min_samples_leaf')\n",
    "plt.legend()\n",
    "plt.grid(True, linewidth=0.3)\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "max_merror = float('Inf')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "training: learning_rate =  0.01\n",
      "log loss of GBDT on train set: 0.44814\n",
      "log loss of GBDT on valid set: 0.44829\n",
      "training: learning_rate =  0.03\n",
      "log loss of GBDT on train set: 0.43420\n",
      "log loss of GBDT on valid set: 0.43427\n",
      "training: learning_rate =  0.05\n",
      "log loss of GBDT on train set: 0.42801\n",
      "log loss of GBDT on valid set: 0.42804\n",
      "training: learning_rate =  0.07\n",
      "log loss of GBDT on train set: 0.42566\n",
      "log loss of GBDT on valid set: 0.42573\n",
      "training: learning_rate =  0.09\n",
      "log loss of GBDT on train set: 0.42379\n",
      "log loss of GBDT on valid set: 0.42390\n",
      "training: learning_rate =  0.11\n",
      "log loss of GBDT on train set: 0.42243\n",
      "log loss of GBDT on valid set: 0.42254\n",
      "training: learning_rate =  0.13\n",
      "log loss of GBDT on train set: 0.42211\n",
      "log loss of GBDT on valid set: 0.42200\n",
      "training: learning_rate =  0.15\n",
      "log loss of GBDT on train set: 0.42201\n",
      "log loss of GBDT on valid set: 0.42194\n",
      "training: learning_rate =  0.17\n",
      "log loss of GBDT on train set: 0.42186\n",
      "log loss of GBDT on valid set: 0.42224\n",
      "training: learning_rate =  0.19\n",
      "log loss of GBDT on train set: 0.42252\n",
      "log loss of GBDT on valid set: 0.42283\n",
      "training: learning_rate =  0.21\n",
      "log loss of GBDT on train set: 0.42239\n",
      "log loss of GBDT on valid set: 0.42234\n",
      "{'n_estimators': 30, 'max_depth': 7, 'min_samples_split': 85, 'min_samples_leaf': 22, 'learning_rate': 0.15}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "2495"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### min_samples_leaf\n",
    "log_loss_train = []\n",
    "log_loss_valid = []\n",
    "\n",
    "learning_rate = [0.01,0.03,0.05,0.07,0.09,0.11,0.13,0.15,0.17,0.19,0.21]\n",
    "for lr in learning_rate:\n",
    "    print('training: learning_rate = ', lr)\n",
    "    \n",
    "    params['learning_rate'] = lr\n",
    "    gbdt_model.set_params(**params)\n",
    "    gbdt_model.fit(X_train_gbdt, y_train_gbdt)\n",
    "    # scores\n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_train_gbdt)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_train_gbdt, y_pred_gbdt)\n",
    "    print('log loss of GBDT on train set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_train.append(log_loss_gbdt)\n",
    "    \n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_valid)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_valid, y_pred_gbdt)\n",
    "    print('log loss of GBDT on valid set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_valid.append(log_loss_gbdt)\n",
    "    \n",
    "    \n",
    "    mean_merror = log_loss_gbdt\n",
    "    \n",
    "\n",
    "    if mean_merror < max_merror:\n",
    "        max_merror = mean_merror\n",
    "        best_params['learning_rate'] = lr\n",
    "                \n",
    "print(best_params) \n",
    "params['learning_rate'] = best_params['learning_rate']   \n",
    "\n",
    "gc.collect()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## plot the curve\n",
    "f1 = plt.figure(4)\n",
    "learnig_rate = [0.01,0.03,0.05,0.07,0.09,0.11,0.13,0.15,0.17,0.19,0.21]\n",
    "plt.plot(learnig_rate, log_loss_train, label='train')\n",
    "plt.plot(learnig_rate, log_loss_valid, label='valid')\n",
    "plt.xlabel('learnig_rate')\n",
    "plt.ylabel('log_loss')\n",
    "plt.title('learnig_rate')\n",
    "plt.legend()\n",
    "plt.grid(True, linewidth=0.3)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "max_merror = float('Inf')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "training: n_estimators =  20\n",
      "log loss of GBDT on train set: 0.42404\n",
      "log loss of GBDT on valid set: 0.42377\n",
      "training: n_estimators =  22\n",
      "log loss of GBDT on train set: 0.42364\n",
      "log loss of GBDT on valid set: 0.42337\n",
      "training: n_estimators =  24\n",
      "log loss of GBDT on train set: 0.42324\n",
      "log loss of GBDT on valid set: 0.42311\n",
      "training: n_estimators =  26\n",
      "log loss of GBDT on train set: 0.42300\n",
      "log loss of GBDT on valid set: 0.42288\n",
      "training: n_estimators =  28\n",
      "log loss of GBDT on train set: 0.42232\n",
      "log loss of GBDT on valid set: 0.42225\n",
      "training: n_estimators =  30\n",
      "log loss of GBDT on train set: 0.42201\n",
      "log loss of GBDT on valid set: 0.42194\n",
      "training: n_estimators =  32\n",
      "log loss of GBDT on train set: 0.42183\n",
      "log loss of GBDT on valid set: 0.42188\n",
      "training: n_estimators =  34\n",
      "log loss of GBDT on train set: 0.42160\n",
      "log loss of GBDT on valid set: 0.42165\n",
      "training: n_estimators =  36\n",
      "log loss of GBDT on train set: 0.42122\n",
      "log loss of GBDT on valid set: 0.42128\n",
      "training: n_estimators =  38\n",
      "log loss of GBDT on train set: 0.42111\n",
      "log loss of GBDT on valid set: 0.42107\n",
      "training: n_estimators =  40\n",
      "log loss of GBDT on train set: 0.42085\n",
      "log loss of GBDT on valid set: 0.42089\n",
      "training: n_estimators =  42\n",
      "log loss of GBDT on train set: 0.42079\n",
      "log loss of GBDT on valid set: 0.42103\n",
      "training: n_estimators =  44\n",
      "log loss of GBDT on train set: 0.42048\n",
      "log loss of GBDT on valid set: 0.42079\n",
      "training: n_estimators =  46\n",
      "log loss of GBDT on train set: 0.42020\n",
      "log loss of GBDT on valid set: 0.42059\n",
      "training: n_estimators =  48\n",
      "log loss of GBDT on train set: 0.42013\n",
      "log loss of GBDT on valid set: 0.42034\n",
      "training: n_estimators =  50\n",
      "log loss of GBDT on train set: 0.42013\n",
      "log loss of GBDT on valid set: 0.42042\n",
      "{'n_estimators': 48, 'max_depth': 7, 'min_samples_split': 85, 'min_samples_leaf': 22, 'learning_rate': 0.15}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "2698"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### 再次精细调 n_estimators\n",
    "\n",
    "log_loss_train = []\n",
    "log_loss_valid = []\n",
    "\n",
    "for nt in range(20,51,2):\n",
    "    print('training: n_estimators = ', nt)\n",
    "    \n",
    "    params['n_estimators'] = nt\n",
    "    gbdt_model.set_params(**params)\n",
    "    gbdt_model.fit(X_train_gbdt, y_train_gbdt)\n",
    "    # scores\n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_train_gbdt)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_train_gbdt, y_pred_gbdt)\n",
    "    print('log loss of GBDT on train set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_train.append(log_loss_gbdt)\n",
    "    \n",
    "    y_pred_gbdt = gbdt_model.predict_proba(X_valid)[:, 1]\n",
    "    log_loss_gbdt = log_loss(y_valid, y_pred_gbdt)\n",
    "    print('log loss of GBDT on valid set: %.5f' % log_loss_gbdt)\n",
    "    log_loss_valid.append(log_loss_gbdt)\n",
    "    \n",
    "    mean_merror = log_loss_gbdt\n",
    "    \n",
    "\n",
    "    if mean_merror < max_merror:\n",
    "        max_merror = mean_merror\n",
    "        best_params['n_estimators'] = nt\n",
    "        \n",
    "\n",
    "print(best_params)\n",
    "\n",
    "params['n_estimators'] = best_params['n_estimators']\n",
    "    \n",
    "\n",
    "gc.collect()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## plot the curve\n",
    "f1 = plt.figure(1)\n",
    "n_estimators =  range(20,51,2)\n",
    "plt.plot(n_estimators, log_loss_train, label='train')\n",
    "plt.plot(n_estimators, log_loss_valid, label='valid')\n",
    "plt.xlabel('n_estimators')\n",
    "plt.ylabel('log_loss')\n",
    "plt.title('n_estimators')\n",
    "plt.legend()\n",
    "plt.grid(True, linewidth=0.3)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'learning_rate': 0.15, 'n_estimators': 48, 'max_depth': 7, 'min_samples_split': 85, 'min_samples_leaf': 22, 'subsample': 0.01, 'max_leaf_nodes': None, 'random_state': 1, 'verbose': 0}\n"
     ]
    }
   ],
   "source": [
    "print(params)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
